home *** CD-ROM | disk | FTP | other *** search
- package java.security;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.ObjectInputStream;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedHashMap;
- import java.util.LinkedHashSet;
- import java.util.Locale;
- import java.util.Map;
- import java.util.Properties;
- import java.util.Set;
- import sun.security.util.Debug;
-
- public abstract class Provider extends Properties {
- static final long serialVersionUID = -4298000515446427739L;
- private static final Debug debug = Debug.getInstance("provider", "Provider");
- private String name;
- private String info;
- private double version;
- private transient Set entrySet = null;
- private transient int entrySetCallCount = 0;
- private transient boolean initialized;
- private transient boolean legacyChanged;
- private transient boolean servicesChanged;
- private transient Map<String, String> legacyStrings;
- private transient Map<ServiceKey, Service> serviceMap;
- private transient Map<ServiceKey, Service> legacyMap;
- private transient Set<Service> serviceSet;
- private static final String ALIAS_PREFIX = "Alg.Alias.";
- private static final String ALIAS_PREFIX_LOWER = "alg.alias.";
- private static final int ALIAS_LENGTH = "Alg.Alias.".length();
- private static volatile ServiceKey previousKey = new ServiceKey("", "", false, (1)null);
- private static final Map<String, EngineDescription> knownEngines = new HashMap();
-
- protected Provider(String var1, double var2, String var4) {
- this.name = var1;
- this.version = var2;
- this.info = var4;
- this.putId();
- this.initialized = true;
- }
-
- public String getName() {
- return this.name;
- }
-
- public double getVersion() {
- return this.version;
- }
-
- public String getInfo() {
- return this.info;
- }
-
- public String toString() {
- return this.name + " version " + this.version;
- }
-
- public synchronized void clear() {
- this.check("clearProviderProperties." + this.name);
- if (debug != null) {
- debug.println("Remove " + this.name + " provider properties");
- }
-
- this.implClear();
- }
-
- public synchronized void load(InputStream var1) throws IOException {
- this.check("putProviderProperty." + this.name);
- if (debug != null) {
- debug.println("Load " + this.name + " provider properties");
- }
-
- Properties var2 = new Properties();
- var2.load(var1);
- this.implPutAll(var2);
- }
-
- public synchronized void putAll(Map<?, ?> var1) {
- this.check("putProviderProperty." + this.name);
- if (debug != null) {
- debug.println("Put all " + this.name + " provider properties");
- }
-
- this.implPutAll(var1);
- }
-
- public synchronized Set<Map.Entry<Object, Object>> entrySet() {
- this.checkInitialized();
- if (this.entrySet == null) {
- if (this.entrySetCallCount++ != 0) {
- return super.entrySet();
- }
-
- this.entrySet = Collections.unmodifiableMap(this).entrySet();
- }
-
- if (this.entrySetCallCount != 2) {
- throw new RuntimeException("Internal error.");
- } else {
- return this.entrySet;
- }
- }
-
- public Set<Object> keySet() {
- this.checkInitialized();
- return Collections.unmodifiableSet(super.keySet());
- }
-
- public Collection<Object> values() {
- this.checkInitialized();
- return Collections.unmodifiableCollection(super.values());
- }
-
- public synchronized Object put(Object var1, Object var2) {
- this.check("putProviderProperty." + this.name);
- if (debug != null) {
- debug.println("Set " + this.name + " provider property [" + var1 + "/" + var2 + "]");
- }
-
- return this.implPut(var1, var2);
- }
-
- public synchronized Object remove(Object var1) {
- this.check("removeProviderProperty." + this.name);
- if (debug != null) {
- debug.println("Remove " + this.name + " provider property " + var1);
- }
-
- return this.implRemove(var1);
- }
-
- public Object get(Object var1) {
- this.checkInitialized();
- return super.get(var1);
- }
-
- public Enumeration<Object> keys() {
- this.checkInitialized();
- return super.keys();
- }
-
- public Enumeration<Object> elements() {
- this.checkInitialized();
- return super.elements();
- }
-
- public String getProperty(String var1) {
- this.checkInitialized();
- return super.getProperty(var1);
- }
-
- private void checkInitialized() {
- if (!this.initialized) {
- throw new IllegalStateException();
- }
- }
-
- private void check(String var1) {
- this.checkInitialized();
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkSecurityAccess(var1);
- }
-
- }
-
- private void putId() {
- super.put("Provider.id name", String.valueOf(this.name));
- super.put("Provider.id version", String.valueOf(this.version));
- super.put("Provider.id info", String.valueOf(this.info));
- super.put("Provider.id className", this.getClass().getName());
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- HashMap var2 = new HashMap();
-
- for(Map.Entry var4 : super.entrySet()) {
- var2.put(var4.getKey(), var4.getValue());
- }
-
- this.defaults = null;
- var1.defaultReadObject();
- this.implClear();
- this.initialized = true;
- this.putAll(var2);
- }
-
- private void implPutAll(Map var1) {
- for(Map.Entry var3 : var1.entrySet()) {
- this.implPut(var3.getKey(), var3.getValue());
- }
-
- }
-
- private Object implRemove(Object var1) {
- if (var1 instanceof String) {
- String var2 = (String)var1;
- if (var2.startsWith("Provider.")) {
- return null;
- }
-
- this.legacyChanged = true;
- if (this.legacyStrings == null) {
- this.legacyStrings = new LinkedHashMap();
- }
-
- this.legacyStrings.remove(var2);
- }
-
- return super.remove(var1);
- }
-
- private Object implPut(Object var1, Object var2) {
- if (var1 instanceof String && var2 instanceof String) {
- String var3 = (String)var1;
- if (var3.startsWith("Provider.")) {
- return null;
- }
-
- this.legacyChanged = true;
- if (this.legacyStrings == null) {
- this.legacyStrings = new LinkedHashMap();
- }
-
- this.legacyStrings.put(var3, (String)var2);
- }
-
- return super.put(var1, var2);
- }
-
- private void implClear() {
- if (this.legacyStrings != null) {
- this.legacyStrings.clear();
- }
-
- if (this.legacyMap != null) {
- this.legacyMap.clear();
- }
-
- if (this.serviceMap != null) {
- this.serviceMap.clear();
- }
-
- this.legacyChanged = false;
- this.servicesChanged = false;
- this.serviceSet = null;
- super.clear();
- this.putId();
- }
-
- private void ensureLegacyParsed() {
- if (this.legacyChanged && this.legacyStrings != null) {
- this.serviceSet = null;
- if (this.legacyMap == null) {
- this.legacyMap = new LinkedHashMap();
- } else {
- this.legacyMap.clear();
- }
-
- for(Map.Entry var2 : this.legacyStrings.entrySet()) {
- this.parseLegacyPut((String)var2.getKey(), (String)var2.getValue());
- }
-
- this.removeInvalidServices(this.legacyMap);
- this.legacyChanged = false;
- }
- }
-
- private void removeInvalidServices(Map<ServiceKey, Service> var1) {
- Iterator var2 = var1.entrySet().iterator();
-
- while(var2.hasNext()) {
- Map.Entry var3 = (Map.Entry)var2.next();
- Service var4 = (Service)var3.getValue();
- if (!java.security.Provider.Service.access$000(var4)) {
- var2.remove();
- }
- }
-
- }
-
- private String[] getTypeAndAlgorithm(String var1) {
- int var2 = var1.indexOf(".");
- if (var2 < 1) {
- if (debug != null) {
- debug.println("Ignoring invalid entry in provider " + this.name + ":" + var1);
- }
-
- return null;
- } else {
- String var3 = var1.substring(0, var2);
- String var4 = var1.substring(var2 + 1);
- return new String[]{var3, var4};
- }
- }
-
- private void parseLegacyPut(String var1, String var2) {
- if (var1.toLowerCase(Locale.ENGLISH).startsWith("alg.alias.")) {
- String var4 = var1.substring(ALIAS_LENGTH);
- String[] var5 = this.getTypeAndAlgorithm(var4);
- if (var5 == null) {
- return;
- }
-
- String var6 = getEngineName(var5[0]);
- String var7 = var5[1].intern();
- ServiceKey var8 = new ServiceKey(var6, var2, true, (1)null);
- Service var9 = (Service)this.legacyMap.get(var8);
- if (var9 == null) {
- var9 = new Service(this, (1)null);
- java.security.Provider.Service.access$302(var9, var6);
- java.security.Provider.Service.access$402(var9, var2);
- this.legacyMap.put(var8, var9);
- }
-
- this.legacyMap.put(new ServiceKey(var6, var7, true, (1)null), var9);
- java.security.Provider.Service.access$500(var9, var7);
- } else {
- String[] var3 = this.getTypeAndAlgorithm(var1);
- if (var3 == null) {
- return;
- }
-
- int var12 = var3[1].indexOf(32);
- if (var12 == -1) {
- String var13 = getEngineName(var3[0]);
- String var14 = var3[1].intern();
- ServiceKey var17 = new ServiceKey(var13, var14, true, (1)null);
- Service var19 = (Service)this.legacyMap.get(var17);
- if (var19 == null) {
- var19 = new Service(this, (1)null);
- java.security.Provider.Service.access$302(var19, var13);
- java.security.Provider.Service.access$402(var19, var14);
- this.legacyMap.put(var17, var19);
- }
-
- java.security.Provider.Service.access$602(var19, var2);
- } else {
- String var15 = getEngineName(var3[0]);
- String var16 = var3[1];
- String var18 = var16.substring(0, var12).intern();
-
- String var20;
- for(var20 = var16.substring(var12 + 1); var20.startsWith(" "); var20 = var20.substring(1)) {
- }
-
- var20 = var20.intern();
- ServiceKey var10 = new ServiceKey(var15, var18, true, (1)null);
- Service var11 = (Service)this.legacyMap.get(var10);
- if (var11 == null) {
- var11 = new Service(this, (1)null);
- java.security.Provider.Service.access$302(var11, var15);
- java.security.Provider.Service.access$402(var11, var18);
- this.legacyMap.put(var10, var11);
- }
-
- var11.addAttribute(var20, var2);
- }
- }
-
- }
-
- public synchronized Service getService(String var1, String var2) {
- this.checkInitialized();
- ServiceKey var3 = previousKey;
- if (!var3.matches(var1, var2)) {
- var3 = new ServiceKey(var1, var2, false, (1)null);
- previousKey = var3;
- }
-
- if (this.serviceMap != null) {
- Service var4 = (Service)this.serviceMap.get(var3);
- if (var4 != null) {
- return var4;
- }
- }
-
- this.ensureLegacyParsed();
- return this.legacyMap != null ? (Service)this.legacyMap.get(var3) : null;
- }
-
- public synchronized Set<Service> getServices() {
- this.checkInitialized();
- if (this.legacyChanged || this.servicesChanged) {
- this.serviceSet = null;
- }
-
- if (this.serviceSet == null) {
- this.ensureLegacyParsed();
- LinkedHashSet var1 = new LinkedHashSet();
- if (this.serviceMap != null) {
- var1.addAll(this.serviceMap.values());
- }
-
- if (this.legacyMap != null) {
- var1.addAll(this.legacyMap.values());
- }
-
- this.serviceSet = Collections.unmodifiableSet(var1);
- this.servicesChanged = false;
- }
-
- return this.serviceSet;
- }
-
- protected synchronized void putService(Service var1) {
- this.check("putProviderProperty." + this.name);
- if (debug != null) {
- debug.println(this.name + ".putService(): " + var1);
- }
-
- if (var1 == null) {
- throw new NullPointerException();
- } else if (var1.getProvider() != this) {
- throw new IllegalArgumentException("service.getProvider() must match this Provider object");
- } else {
- if (this.serviceMap == null) {
- this.serviceMap = new LinkedHashMap();
- }
-
- this.servicesChanged = true;
- String var2 = var1.getType();
- String var3 = var1.getAlgorithm();
- ServiceKey var4 = new ServiceKey(var2, var3, true, (1)null);
- this.implRemoveService((Service)this.serviceMap.get(var4));
- this.serviceMap.put(var4, var1);
-
- for(String var6 : java.security.Provider.Service.access$700(var1)) {
- this.serviceMap.put(new ServiceKey(var2, var6, true, (1)null), var1);
- }
-
- this.putPropertyStrings(var1);
- }
- }
-
- private void putPropertyStrings(Service var1) {
- String var2 = var1.getType();
- String var3 = var1.getAlgorithm();
- super.put(var2 + "." + var3, var1.getClassName());
-
- for(String var5 : java.security.Provider.Service.access$700(var1)) {
- super.put("Alg.Alias." + var2 + "." + var5, var3);
- }
-
- for(Map.Entry var8 : java.security.Provider.Service.access$800(var1).entrySet()) {
- String var6 = var2 + "." + var3 + " " + var8.getKey();
- super.put(var6, var8.getValue());
- }
-
- }
-
- private void removePropertyStrings(Service var1) {
- String var2 = var1.getType();
- String var3 = var1.getAlgorithm();
- super.remove(var2 + "." + var3);
-
- for(String var5 : java.security.Provider.Service.access$700(var1)) {
- super.remove("Alg.Alias." + var2 + "." + var5);
- }
-
- for(Map.Entry var8 : java.security.Provider.Service.access$800(var1).entrySet()) {
- String var6 = var2 + "." + var3 + " " + var8.getKey();
- super.remove(var6);
- }
-
- }
-
- protected synchronized void removeService(Service var1) {
- this.check("removeProviderProperty." + this.name);
- if (debug != null) {
- debug.println(this.name + ".removeService(): " + var1);
- }
-
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- this.implRemoveService(var1);
- }
- }
-
- private void implRemoveService(Service var1) {
- if (var1 != null && this.serviceMap != null) {
- String var2 = var1.getType();
- String var3 = var1.getAlgorithm();
- ServiceKey var4 = new ServiceKey(var2, var3, false, (1)null);
- Service var5 = (Service)this.serviceMap.get(var4);
- if (var1 == var5) {
- this.servicesChanged = true;
- this.serviceMap.remove(var4);
-
- for(String var7 : java.security.Provider.Service.access$700(var1)) {
- this.serviceMap.remove(new ServiceKey(var2, var7, false, (1)null));
- }
-
- this.removePropertyStrings(var1);
- }
- }
- }
-
- private static void addEngine(String var0, boolean var1, String var2) {
- EngineDescription var3 = new EngineDescription(var0, var1, var2);
- knownEngines.put(var0.toLowerCase(Locale.ENGLISH), var3);
- knownEngines.put(var0, var3);
- }
-
- private static String getEngineName(String var0) {
- EngineDescription var1 = (EngineDescription)knownEngines.get(var0);
- if (var1 == null) {
- var1 = (EngineDescription)knownEngines.get(var0.toLowerCase(Locale.ENGLISH));
- }
-
- return var1 == null ? var0 : var1.name;
- }
-
- // $FF: synthetic method
- static String access$900(String var0) {
- return getEngineName(var0);
- }
-
- // $FF: synthetic method
- static Map access$1000() {
- return knownEngines;
- }
-
- static {
- addEngine("AlgorithmParameterGenerator", false, (String)null);
- addEngine("AlgorithmParameters", false, (String)null);
- addEngine("KeyFactory", false, (String)null);
- addEngine("KeyPairGenerator", false, (String)null);
- addEngine("KeyStore", false, (String)null);
- addEngine("MessageDigest", false, (String)null);
- addEngine("SecureRandom", false, (String)null);
- addEngine("Signature", true, (String)null);
- addEngine("CertificateFactory", false, (String)null);
- addEngine("CertPathBuilder", false, (String)null);
- addEngine("CertPathValidator", false, (String)null);
- addEngine("CertStore", false, "java.security.cert.CertStoreParameters");
- addEngine("Cipher", true, (String)null);
- addEngine("ExemptionMechanism", false, (String)null);
- addEngine("Mac", true, (String)null);
- addEngine("KeyAgreement", true, (String)null);
- addEngine("KeyGenerator", false, (String)null);
- addEngine("SecretKeyFactory", false, (String)null);
- addEngine("KeyManagerFactory", false, (String)null);
- addEngine("SSLContext", false, (String)null);
- addEngine("TrustManagerFactory", false, (String)null);
- addEngine("GssApiMechanism", false, (String)null);
- addEngine("SaslClientFactory", false, (String)null);
- addEngine("SaslServerFactory", false, (String)null);
- addEngine("Policy", false, "java.security.Policy$Parameters");
- addEngine("Configuration", false, "javax.security.auth.login.Configuration$Parameters");
- addEngine("XMLSignatureFactory", false, (String)null);
- addEngine("KeyInfoFactory", false, (String)null);
- addEngine("TransformService", false, (String)null);
- addEngine("TerminalFactory", false, "java.lang.Object");
- }
- }
-